/**
 * @widoc $.showAlert
 * @namespace aux
 * @des 显示 alert 弹框
 * @type function
 * @param {string} sMsg 提示信息
 * @param {function=} fCb 关闭提示信息时的回调函数
 * @param {object=} oWin 弹框时参照的 window 对象，默认为当前 window。
 */
$.showAlert = function(sMsg, fCb, oWin){// TODO return index 供关闭，考虑 oWin
    if(!oWin){//如果没有传递oWin值，则将window值赋给oWin
        oWin = window;
    }
    if(oWin.layer){//当window下有layer对象时，调用layer.alert()
        var keyEnterApi, sCurIndex;
        var jqActive = $(document.activeElement);
        var fCloseAlert = function(){
            fCb && fCb();
            oWin.layer.close(sCurIndex);
            keyEnterApi.fCancel();
            jqActive.focus();
        };
        jqActive.blur();
        oWin.layer.alert(sMsg, {
            title: false, //不显示标题
            closeBtn: 0,    //无关闭按钮
            success: function(layero, index){
                sCurIndex = index;
                keyEnterApi = $(document).setKeyEnter({// 回车触发关闭layer
                    callback: fCloseAlert
                });
            }
        }, fCloseAlert);
    }
    else{//否则输出警告框
        alert(sMsg);
        fCb && fCb();
    }
};
/**
 * @widoc $.showConfirm
 * @namespace aux
 * @des 显示 confirm 弹框
 * @type function
 * @param {string} sMsg 提示信息
 * @param {function=} fCbyes 点击确认时的回调函数
 * @param {function=} fCbno 点击取消时的回调函数
 * @param {object=} oWin 弹框时参照的 window 对象，默认为当前 window。
 */
$.showConfirm = function(sMsg, fCbyes, fCbno, oWin){
    if(!oWin){//如果没有传递oWin值，则将window值赋给oWin
        oWin = window;
    }
    if(oWin.layer){//当window下有layer对象时，调用layer.confirm()
        oWin.layer.confirm(sMsg, {
            title: false,//不显示标题
            closeBtn: 0,//不显示关闭按钮
            btn: ['确定', '取消']
        }, function(index){
            fCbyes && fCbyes();
            oWin.layer.close(index);
        }, function(index){
            fCbno && fCbno();
            oWin.layer.close(index);
        })
    }
    else if(confirm(sMsg)){
        fCbyes && fCbyes();
    }
    else{
        fCbno && fCbno();
    }
};
/**
 * @widoc $.showMsg
 * @namespace aux
 * @des 显示 msg 弹框
 * @type function
 * @param {string} sMsg 提示信息
 * @param {function=} fCb 关闭时的回调函数
 * @param {object=} oWin 弹框时参照的 window 对象，默认为当前 window。
 */
$.showMsg = function(sMsg, fCb, oWin){
    if(!oWin){//如果没有传递oWin值，则将window值赋给oWin
        oWin = window;
    }
    if(oWin.layer){//当window下有layer对象时，调用layer.msg()
        oWin.layer.msg(sMsg, {
            shade: 0.3,//提示框背部的阴影程度
            time: 1000,//提示框的显示时间
            end: fCb   //关闭时的回调函数
        });
    }
    else{//否则输出警告框
        alert(sMsg);
        fCb && fCb();
    }
};
/**
 * @widoc $.showValiTip
 * @namespace aux
 * @des 显示 el 上验证提示信息 msg
 * @type function
 * @param {*} el 弹出 tip 的参照元素，支持选择器
 * @param {string} sMsg 提示信息
 * @param {object=} opts layer.tips 的参数扩展
 */
$.showValiTip = function(el, sMsg, opts){
    if(window.layer){//当window下有layer对象时，调用layer.tips()
        var bShadeClose;
        var nIndex = layer.tips(sMsg, el, $.extend({
            tips: [1, '#FF9901'],//提示框背景颜色
            time: 1000//提示显示时间
        }, opts));
        if(opts){
            bShadeClose = opts.shadeClose;
        }
        $(document).off('click.hideTip');
        bShadeClose && $(document).on('click.hideTip', function(e){
            if(!$(e.target).closest('#layui-layer' + nIndex).length && !$(e.target).closest(el).length){
                layer.close(nIndex);
                $(document).off('click.hideTip');
            }
        });
    }
    else{
        alert(sMsg);
    }
};
